package soccerBet.project.Parser;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import soccerBet.project.dao.EpocaLigaDAO;
import soccerBet.project.dao.JogoDAO;
import soccerBet.project.objects.EpocaLiga;
import soccerBet.project.objects.Jogo;
import soccerBet.project.objects.Ronda;
import soccerBet.project.services.ClassificacaoService;
import soccerBet.project.services.ConfiguracaoService;
import soccerBet.project.services.EpocaLigaService;
import soccerBet.project.services.JogoService;
import soccerBet.project.utils.Display;
import soccerBet.project.utils.Prop;

public class ScreenScraping {

	public EpocaLigaService epocaLigaService = new EpocaLigaService();
	public JogoService jogoService = new JogoService();
	
	public ScreenScraping() {

	}

	public void getStatistics() {

		
		List<EpocaLiga> epocaLigas=epocaLigaService.getAllEpocaLiga();
		List<EpocaLiga> epocaLigaList = new ArrayList<EpocaLiga>();
        List<Integer> epocaLigaIdsList = new ArrayList<Integer>();
		
		for (EpocaLiga EpocaLiga : epocaLigas) {

			for (Ronda r : EpocaLiga.getRondas()) {
				if (r.getDataActualizacao() == null) {
					epocaLigaList.add(EpocaLiga);
				} else {
					List<Jogo> jogos = jogoService.getJogosDisputados(r.getDataActualizacao(),EpocaLiga.getIdEpocaLiga());
					
					if (jogos.size() > 0) {
						Parser parse = new Parser();
						System.out.println("A obter jogos efectuados...\n");
						parse.actualizaJogos(jogos , r.getEpocaLiga().getIdEpocaLiga());
			            epocaLigaIdsList.add(r.getEpocaLiga().getIdEpocaLiga());
					}
				}
			}
		}

	    ClassificacaoService sc = new ClassificacaoService(epocaLigaIdsList);
	    sc.enviaClassificacao();  
      
		
		Parser parse = new Parser(epocaLigaList);
		parse.obtemInfo();
		
		
		if(Boolean.parseBoolean((String) Prop.properties.get("soccerBet.updateGames"))==true){
			Display.println("Obtem jogos NULL OR HOUR ZERO...\n");
			Parser p = new Parser();
			
			List<Jogo> jogos = jogoService.getJogosBroken();
			
			for(int i=0;i<jogos.size();i++){
				jogoService.updateDatas(jogos.get(i).getIdJogo(),p.readWebsiteGame(jogos.get(i)));
			}
			
		}
		
	}

	public void updateDatesOfGames() {
		
		ConfiguracaoService cS = new ConfiguracaoService();
		
		Parser p = new Parser();

		
		if(cS.getConfiguracao().getDataActualizacao() == null || ((cS.getConfiguracao().getDataActualizacao().getTime()) + (24*60*60*1000)) <= new Date().getTime()){
			
			Display.println("Update jogos...");
			
			List<Jogo> jogos = jogoService.getJogosWithoutResults();
			
			for(int i=0;i<jogos.size();i++){
				jogoService.updateDatas(jogos.get(i).getIdJogo(),p.readWebsiteGame(jogos.get(i)));
			}
			
			cS.updateDataConfiguracao();
		}
		
	}


}
